package jdbc;

import jdbc.common.InputUtil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Scanner;

/**
 * 用户注册功能
 * 需求:
 * 1:程序启动后陆续要求用户输入:用户名，密码，昵称，年龄四个信息
 *   Scanner
 * 2:链接数据库
 * 3:将用户输入的信息包含在一条INSERT语句中
 * 4:执行该SQL语句将用户信息保存到userinfo表中
 * 5:提示用户注册成功
 * 6:关闭数据库链接
 */
public class RegUserDemo {
    public static void main(String[] args) throws Exception {
        //这段代码通过 InputUtil.getInputObject(new UserInfo()) 创建并初始化一个 UserInfo 对象。该方法利用反射机制，
        // 自动为 UserInfo 类中带有 @InputField 注解的字段生成输入提示，并从控制台获取用户输入，完成对象属性的赋值。
        UserInfo userinfo = InputUtil.getInputObject(new UserInfo(),"欢迎注册");
        System.out.println(userinfo);

       /* Scanner scanner = new Scanner(System.in);
        System.out.println("欢迎注册");
        System.out.println("请输入用户名:");
        String username = scanner.nextLine();
        System.out.println("请输入密码:");
        String password = scanner.nextLine();
        System.out.println("请输入昵称:");
        String nickname = scanner.nextLine();
        System.out.println("请输入年龄:");
        int age = scanner.nextInt();*/


        Connection connection = DBUtil.getConnection();
        System.out.println("与数据库链接成功!");
        Statement statement = connection.createStatement();//创建一个 Statement 对象，用于执行 SQL 语句。
        String sql = "INSERT INTO userinfo(username,password,nickname,age) " +
                "VALUES('"+userinfo.getUsername()+"','"+userinfo.getPassword()+"','"+userinfo.getNickname()+"',"+userinfo.getAge()+")";
        System.out.println(sql);
        //statement.executeUpdate(sql)：执行 SQL 插入语句。
        int num = statement.executeUpdate(sql);//返回值 num 是受影响的行数,
                                           // 如果 num > 0，表示插入成功，输出“注册成功”。否则输出“注册失败”。
        System.out.println(num>0?"注册成功":"注册失败");
        connection.close();//关闭数据库连接，释放资源。
    }
}

